package com.itheima.service.db;

import com.itheima.domain.db.Questionnaire;
import com.itheima.domain.db.SoulQuestion;
import com.itheima.domain.db.SoulQuestionOption;
import com.itheima.domain.db.SoulUserStatus;
import com.itheima.vo.PageBeanVo;
import com.itheima.domain.db.*;
import com.itheima.domain.mongo.SoulUserReport;

import java.util.List;

public interface QuestionnaireService {

    //查询不同等级测试题的初始信息
    List<Questionnaire> findQuestionnaireAll();

    //查询用户使用测试灵魂模块的各种状态及数据
    SoulUserStatus findUserStatus(Long userId);

    //新增用户状态信息
    void insertUserStatus(SoulUserStatus soulUserStatus);

    //根据问卷id查看对应问题
    List<SoulQuestion> findQuestion(Long questionnaireId);
    //根据问题id查询问题信息
    SoulQuestion findQuestionById(String questionId);

    //根据问题id查询对应选项
    List<SoulQuestionOption> findOption(Long questionId);

    //查询某个问题的某个答案得分
    SoulQuestionOption findQuestionOption(String optionId);

    //根据questionnaireId,presentScore去查人格内容content
    QuestionnaireResult findResult(Integer questionnaireId, Integer presentScore);

    //查询测试卷信息
    Questionnaire findQuestionnaire(Long questionnaireId);

    //更新用户状态(level)
    void updateLevel(SoulUserStatus userStatus);

    //判断最大level是多少
    Integer findMaxLevel();

    //根据等级查询问卷id
    Long findQuestionnaireByLevel(Integer newLevel);

    // 分页查询所有问卷列表
    PageBeanVo findQuestionnaireAllByPage(Integer pageNum, Integer pageSize);

    //根据问卷id分页查看对应问题
    PageBeanVo findQuestionListById(Integer id, Integer pageNum, Integer pageSize);

    // 删除问题
    void deleteQuestionById(Long id);

    // 添加题目
    // void saveQuestion(SoulQuestion soulQuestion, String optionA, String optionB, String scoreA, String scoreB,String optionC, String optionD, String scoreC, String scoreD);
    void saveQuestion(SoulQuestion soulQuestion, String[] option, Integer[] score, Integer[] extroversion, Integer[] judgement, Integer[] abstraction, Integer[] rationality);



    PageBeanVo findQuestionOptionById(Integer questionId, Integer pageNum, Integer pageSize);

    SoulQuestionOption findQuestionOptionInfoById(Long questionQptionId);

    void saveQuestionOptionInfo(Long id, String content, Integer score);

    void deleteQuestionOptionById(Long questionOptionId);

    // 添加问题的选项
    void saveQuestionOption(SoulQuestionOption soulQuestionOption);
}
